module klang.klang.转换工厂.实例化代码.类型.实例化使用类型_;
import 全局;
import ··类型_ = klang.编译.类型.类型_;
import klang.编译.核心.核心_: 整数_, 词典_, 创建词典, 创建数组;
import klang.编译.语法节点.节点_: 基础节点_ = 节点_, 基础源文件_ = 源文件_, 基础令牌_ = 令牌_, 节点数组_;
import klang.klang.语法节点.Klang节点_: 节点_ = Klang节点_, 源文件_ = Klang源文件_, 标识符_ = Klang标识符_;
import klang.klang.类型.klang类型_: 符号_ = Klang符号_, 类型_ = Klang类型_, 签名_ = Klang签名_;
import klang.编译.类型.类型_: 符号表_;
import klang.编译.工具.工具_: 创建符号表;
enum 实例化引用标志_ : int {
    无_ = 0,
    站位符_ = 1,
    内置类型_ = 4,
    类型声明_ = 8,
    类型定义_ = 16,
    函数声明_ = 32,
    函数定义_ = 64,
    构建声明_ = 128,
    构建定义_ = 256,
    方法声明_ = 512,
    方法定义_ = 1024,
    变量声明_ = 2048,
    变量定义_ = 4096,
    外部虚拟_ = 8192,
    外部虚拟函数_ = 16384
}
enum 类型打印标志_ : int {
    无_ = 0,
    跳过限定符_ = 1,
    生成全局站位符_ = 2,
    字面量提升_ = 4,
    枚举提升_ = 8,
    加入未完成语句_ = 16,
    泛型实例化_ = 32
}
class 未整合的源文件_ {
    词典_!(long) 源文件组内索引;
    源文件_[] 整合的文件;
    基础节点_[] 变量声明组;
    基础节点_[] 测试单元组;
    基础节点_[] 语句组;
    词典_!(基础节点_[]) 对象声明组;
    词典_!(实例化引用标志_) 文件内存在的;
    词典_!(实例化引用标志_) 需要引用的;
    dstring 程序名称;
    符号表_ 源文件的符号表;
    this() {
        this.源文件组内索引 = 创建词典!(long)();
        this.整合的文件 = 创建数组!(源文件_)();
        this.变量声明组 = 创建数组!(基础节点_)();
        this.测试单元组 = 创建数组!(基础节点_)();
        this.语句组 = 创建数组!(基础节点_)();
        this.对象声明组 = 创建词典!(基础节点_[])();
        this.文件内存在的 = 创建词典!(实例化引用标志_)();
        this.需要引用的 = 创建词典!(实例化引用标志_)();
        this.源文件的符号表 = 创建符号表();
        this.程序名称 = ""d;
    }
    bool 是空的() {
        return this.语句组.length <= 0 && this.对象声明组.大小() <= 0;
    }
}
class 实例化引用_ {
    实例化引用标志_ 引用标志;
    节点_ 类型声明;
    节点_ 类型引用;
    dstring 类型名称;
    dstring 碎裂名称;
    符号_ 符号;
    签名_[] 虚表;
    类型_ 类型;
    基础节点_[] 非虚语句组;
    基础节点_[] 虚表语句组;
    基础节点_[] 构建及释放声明组;
    基础节点_[] 变量定义;
    基础节点_ 变量声明语句;
    基础节点_ 变量定义语句;
    // 函数的
    节点_ 函数定义;
    节点_ 函数声明;
    this() {
        this.引用标志 = 实例化引用标志_.无_;
        this.类型声明 = ··null!(节点_);
        this.类型引用 = ··null!(节点_);
        this.类型名称 = ··null!(dstring);
        this.碎裂名称 = ··null!(dstring);
        this.符号 = ··null!(符号_);
        this.虚表 = ··null!(签名_[]);
        this.类型 = ··null!(类型_);
        this.非虚语句组 = ··null!(基础节点_[]);
        this.变量定义 = ··null!(基础节点_[]);
        this.变量声明语句 = ··null!(基础节点_);
        this.变量定义语句 = ··null!(基础节点_);
        this.虚表语句组 = ··null!(基础节点_[]);
        this.构建及释放声明组 = ··null!(基础节点_[]);
        this.函数定义 = ··null!(节点_);
        this.函数声明 = ··null!(节点_);
    }
}
class 类型打印环境_ {
    类型打印标志_ 标志;
    类型_ 当前类型;
    未整合的源文件_ 未整合的源文件;
    this() { }
    this(类型打印标志_ _标志, 未整合的源文件_ _未整合的源文件) {
        this.标志 = _标志;
        this.未整合的源文件 = _未整合的源文件;
        this.当前类型 = ··null!(类型_);
    }
    this(类型打印标志_ _标志) {
        this.标志 = _标志;
        this.未整合的源文件 = ··null!(未整合的源文件_);
        this.当前类型 = ··null!(类型_);
    }
}
